package toOffer;

/**
 * <h3>toOffer</h3>
 *
 * @author YuanAo
 * @date 2024/6/5 18:53
 * @description <p>leetcode 简单题</p>
 */

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 题目：
 * 给你一个整数 columnNumber ，返回它在 Excel 表中相对应的列名称。
 * <p>
 * 例如：
 * <p>
 * A -> 1
 * B -> 2
 * C -> 3
 * ...
 * Z -> 26
 * AA -> 27
 * AB -> 28
 */
public class No168 {
    public static void main(String[] args) {
        int columnNumber = 52;
        System.out.println(convertToTitle(columnNumber));
    }

    /**
     * 思路：a-z 26个字母。这题相当于把10进制的数转换成26进制的数，每一个字母代表一个数
     *
     * @param columnNumber
     * @return
     */
    public static String convertToTitle(int columnNumber) {
        List<Integer> list = convert(columnNumber, 26);
        StringBuilder sb = new StringBuilder();

        for (int i = list.size() - 1; i >= 0; i--) {
            Integer num = list.get(i);
            char c = (char) ('A' + (num == 0 ? 26 : num) - 1);
            sb.append(c);
        }
        return sb.toString();
    }

    /**
     * 十进制转 k进制
     *
     * @param n
     * @param k
     * @return
     */
    public static List<Integer> convert(int n, int k) {
        int temp;
        ArrayList<Integer> list = new ArrayList<>();
        if (n < k) {
            list.add(n);
            return list;
        }

        while (n > k) {
            temp = n % k;
            list.add(temp);
            if (temp == 0){
                temp = k;
            }
            n = (n - temp) / k;
        }

        list.add(n);

        for (int i = list.size() - 1; i >= 0; i--) {
            System.out.print(list.get(i) + " ");
        }

        return list;
    }
}
